package com.yxh.www.author.service;

import com.yxh.www.author.domain.SmAccount;
import com.yxh.www.common.result.Result;
import com.yxh.www.mysql.base.BaseService;

import java.util.List;

/**
 * <p>
 * 系统第三方授权信息 服务类
 * </p>
 *
 * @author Yangxiaohui
 * @since 2020-05-09
 */
public interface SmAccountService extends BaseService<SmAccount> {

    /**
     * 新增系统第三方账户
     *
     * @param accountName 账户名   必填
     * @param remark      账户备注  非必填
     * @param scopeIp     可访问IP域    必填
     * @param userId      用户ID  必填
     * @return 统一响应 {@link Result}
     */
    Result<Object> addSmAccount(String accountName, String remark, String scopeIp, String userId);

    /**
     * 修改系统第三方账户
     *
     * @param id            账户ID    必填
     * @param accountStatus 账户状态 （0：正常；1：失效）
     * @param remark        备注
     * @param scopeIp       可访问IP域    必填
     * @return 统一响应 {@link Result}
     */
    Result<Object> modifySmAccount(String id, String accountStatus, String remark, String scopeIp);

    /**
     * 根据ID删除系统第三方账户
     *
     * @param ids 账户ID集合
     * @return 统一响应 {@link Result}
     */
    Result<Object> removeSmAccount(String[] ids);

    /**
     * 查询系统应用列表
     *
     * @param accountName 应用名称 模糊匹配
     * @param userId      用户ID 精准匹配
     * @return 统一响应 {@link Result< List >} 实体 {@link SmAccount}
     */
    Result<List<SmAccount>> listSmAccount(String accountName, String userId);

    /**
     * 分页查询系统应用列表
     *
     * @param accountName 应用名称 模糊匹配
     * @param userId      用户ID 精准匹配
     * @param pageNum     页码          默认值 1
     * @param pageSize    页面数据长度    默认值 20
     * @return 统一响应 {@link Result}
     */
    Result<Object> pageSmAccount(String accountName, String userId, Long pageNum, Long pageSize);

    /**
     * 第三方应用获取Token
     *
     * @param userId      所属用户ID  必填
     * @param accountName 应用名称    必填
     * @param secretKey   私钥  必填
     * @return 统一响应 {@link Result}
     */
    Result<Object> authorSmAccount(String userId, String accountName, String secretKey);
}
